/**
 * 
 */
package sakila.dto.film;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * The Class FilmDTO.
 */
public class FilmDTO extends BaseDTO
{

	/** The title of the film. */
	private String title;

	/** A short description or plot summary of the film. */
	private String description;

	/** The year in which the movie was released. */
	private short releaseYear;

	/** The identify for language of the film. */
	private int languageId;

	/** The languages of the film. */
	private LanguageDTO language;

	/** The identify for original language of the film. */
	private int originalLanguageId;

	/** The original language of the film, used when a film have been dubbed into a new language. */
	private LanguageDTO originalLanguage;

	/** The length of rental period, in days . */
	private short rentalDuration;

	/** The cost to rent the film for the period specified in rental duration. */
	private float rentalRate;

	/** The duration of the film, in minutes . */
	private short length;

	/** The categories of the film. */
	List<CategoryDTO> categories;

	/** The actors of the film. */
	List<ActorDTO> actors;

	/**
	 * The amount charged to the customer if the film do not return or is returned is in a damaged
	 * state.
	 */
	private float replacementCost;

	/** The rating assigned to the film. can be from 0 to 5 */
	private byte rating;

	/** Lists which common special features are included on the DVD. */
	private List<SpecialFeature> specialFeatures;

	/**
	 * Instantiates a new FilmDTO.
	 */
	public FilmDTO()
	{
		super();
		this.categories = new ArrayList<>();
		this.actors = new ArrayList<>();
	}

	/**
	 * Instantiates a new film dto.
	 * 
	 * @param id the id
	 * @param title the title
	 * @param lastUpdate the last update
	 */
	public FilmDTO(int id, String title, Date lastUpdate)
	{
		super(id, title, lastUpdate);
		this.categories = new ArrayList<>();
		this.actors = new ArrayList<>();
	}

	/**
	 * Gets the actors.
	 * 
	 * @return the actors
	 */
	protected List<ActorDTO> getActors()
	{
		return this.actors;
	}

	/**
	 * Gets the categories.
	 * 
	 * @return the categories
	 */
	protected List<CategoryDTO> getCategories()
	{
		return this.categories;
	}

	/**
	 * Gets the description.
	 * 
	 * @return the description
	 */
	public String getDescription()
	{
		return this.description;
	}

	/**
	 * Gets the language of the film.
	 * 
	 * @return the languages
	 */
	public LanguageDTO getLanguage()
	{
		return this.language;
	}

	/**
	 * Gets the identify for language of the film
	 * 
	 * @return the identify for language of the film
	 */
	protected int getLanguageId()
	{
		return this.languageId;
	}

	/**
	 * Gets the length.
	 * 
	 * @return the length
	 */
	public short getLength()
	{
		return this.length;
	}

	/**
	 * Gets the original language.
	 * 
	 * @return the original language
	 */
	public LanguageDTO getOriginalLanguage()
	{
		return this.originalLanguage;
	}

	/**
	 * Gets the identify for original language of the film
	 * 
	 * @return the identify for original language of the film
	 */
	protected int getOriginalLanguageId()
	{
		return this.originalLanguageId;
	}

	/**
	 * Gets the rating.
	 * 
	 * @return the rating
	 */
	public byte getRating()
	{
		return this.rating;
	}

	/**
	 * Gets the release Year.
	 * 
	 * @return the release Year
	 */
	public short getReleaseYear()
	{
		return this.releaseYear;
	}

	/**
	 * Gets the rentalDuration.
	 * 
	 * @return the rentalDuration
	 */
	public short getRentalDuration()
	{
		return this.rentalDuration;
	}

	/**
	 * Gets the rentalRate.
	 * 
	 * @return the rentalRate
	 */
	public float getRentalRate()
	{
		return this.rentalRate;
	}

	/**
	 * Gets the replacement cost.
	 * 
	 * @return the replacement cost
	 */
	public float getReplacementCost()
	{
		return this.replacementCost;
	}

	/**
	 * Gets the special features.
	 * 
	 * @return the special features
	 */
	public List<SpecialFeature> getSpecialFeatures()
	{
		return this.specialFeatures;
	}

	/**
	 * Gets the title.
	 * 
	 * @return the title
	 */
	public String getTitle()
	{
		return this.title;
	}

	/**
	 * Sets the actors.
	 * 
	 * @param actors the actors to set
	 */
	protected void setActors(List<ActorDTO> actors)
	{
		this.actors = actors;
	}

	/**
	 * Sets the categories.
	 * 
	 * @param categories the categories to set
	 */
	protected void setCategories(List<CategoryDTO> categories)
	{
		this.categories = categories;
	}

	/**
	 * Sets the description.
	 * 
	 * @param description the description to set
	 */
	public void setDescription(String description)
	{
		this.description = description;
	}

	/**
	 * Sets the language of the film.
	 * 
	 * @param language the language to set
	 */
	public void setLanguage(LanguageDTO language)
	{
		this.language = language;
	}

	/**
	 * Sets the identify for language of the film
	 * 
	 * @param languageId the language identify to set
	 */
	protected void setLanguageId(int languageId)
	{
		this.languageId = languageId;
	}

	/**
	 * Sets the length.
	 * 
	 * @param length the length to set
	 */
	public void setLength(short length)
	{
		this.length = length;
	}

	/**
	 * Sets the original language.
	 * 
	 * @param originalLanguage the new original language
	 */
	public void setOriginalLanguage(LanguageDTO originalLanguage)
	{
		this.originalLanguage = originalLanguage;
	}

	/**
	 * Sets the identify for original language of the film
	 * 
	 * @param originalLanguageId the identify for original language of the film to set
	 */
	protected void setOriginalLanguageId(int originalLanguageId)
	{
		this.originalLanguageId = originalLanguageId;
	}

	/**
	 * Sets the rating.
	 * 
	 * @param rating the rating to set
	 */
	public void setRating(byte rating)
	{
		this.rating = rating;
	}

	/**
	 * Sets the release year.
	 * 
	 * @param releaseYear the new release year
	 */
	public void setReleaseYear(short releaseYear)
	{
		this.releaseYear = releaseYear;
	}

	/**
	 * Sets the rental duration.
	 * 
	 * @param rentalDuration the new rental duration
	 */
	public void setRentalDuration(short rentalDuration)
	{
		this.rentalDuration = rentalDuration;
	}

	/**
	 * Sets the rental rate.
	 * 
	 * @param rentalRate the new rental rate
	 */
	public void setRentalRate(float rentalRate)
	{
		this.rentalRate = rentalRate;
	}

	/**
	 * Sets the replacement cost.
	 * 
	 * @param replacementCost the new replacement cost
	 */
	public void setReplacementCost(float replacementCost)
	{
		this.replacementCost = replacementCost;
	}

	/**
	 * Sets the special features.
	 * 
	 * @param specialFeatures the new special features
	 */
	public void setSpecialFeatures(List<SpecialFeature> specialFeatures)
	{
		this.specialFeatures = specialFeatures;
	}

	/**
	 * Sets the title.
	 * 
	 * @param title the title to set
	 */
	public void setTitle(String title)
	{
		this.title = title;
		this.setName(title);
	}
}
